import axios from "axios";
import router from "../router";
import {Message, Loading} from 'element-ui'
import qs from 'qs';

//封装axios网络请求，可以为具体的请求封装具体的 instance 实例  做到不同baseUrl 与 timeout
export function request(config) {

  let userdata = {
    email: sessionStorage.getItem("email"),
    uname: sessionStorage.getItem("uname"),
    uid: sessionStorage.getItem("uid"),
  }

  //创建实例 设置基本参数
  const instance = axios.create({
    baseURL: 'api',
    //timeout: 8000,
    method: config.type||'post',
    responseType: config.blob||'',
    //对每次都要传入的数据做统一的数据添加处理操作  并且统一对数据进行格式转换
    transformRequest: [function (data={}, headers) {
      if(!config.url.includes("loginUser")){
        Object.assign(data, userdata);
      }
      return qs.stringify(data);
    }],
  })
  let loading
  function startLoading() {
    loading = Loading.service({
      lock: true,
      text: '加载中……',
      background: 'rgba(0, 0, 0, 0.5)'
    })
    loading
  }

  function endLoading() {
    loading.close()
  }


  /** 请求拦截器  在这里将用户校验数据添加到 请求头中 提供后端获取 */
  instance.interceptors.request.use(function (config) {
    startLoading()
    return config
  }, function (error) {
    endLoading()
    return Promise.reject(error)
  })

  /** 响应拦截器 */
  instance.interceptors.response.use(res => {
    endLoading()
    if (res.data.stateCode == '401') {
      Message({message: res.data.msg, type: "error"})
      router.push({
        path: '/'
      })
    } else {
      return res;
    }
  }, error => {
    endLoading()
    Message({message: error, type: "error"})
    router.push({
      path: '/'
    })
  });
  return instance(config)
}
